package com.hst.capacity.application.biz;

import com.hst.capacity.domain.model.entity.order.intercity.IntercityOrderEntity;
import com.hst.capacity.domain.model.entity.setting.line.IntercityLineEntity;
import com.hst.capacity.domain.model.request.OrderParam;
import com.hst.capacity.domain.model.request.dispatch.DispatchDriverParam;
import com.hst.capacity.domain.model.request.dispatch.DispatchParam;
import com.hst.capacity.domain.model.request.dispatcher.DispatcherSearchOrderParam;
import com.hst.capacity.domain.model.request.intercity.*;
import com.hst.capacity.domain.model.request.price.IntercityPriceParam;
import com.hst.capacity.domain.model.request.price.IntercityRePriceParam;
import com.hst.capacity.domain.model.response.PagingResultVO;
import com.hst.capacity.domain.model.response.intercity.*;
import com.hst.capacity.domain.model.response.intercity.task.IcSearchTaskVO;
import com.hst.capacity.domain.model.response.intercity.task.IcTaskDetailVO;
import com.hst.capacity.domain.model.response.order.IcOrderInfoVO;
import com.hst.capacity.domain.model.response.order.OrderPriceVO;
import com.hst.capacity.domain.model.response.order.OrderVO;

import java.util.HashMap;
import java.util.List;

public interface IntercityOrderBiz {

    OrderVO refresh(OrderParam param);

//    List<IntercityOrderEntity> findIcOrderListByUserMobile(OrderParam param);
//    List<IntercityOrderEntity> findIcOrderListByRegionCode(OrderParam param);
//    List<IntercityOrderEntity> getNewIntercityList(OrderParam param);
//    OrderPriceVO getIntercityPrice(IntercityPriceParam param);
    IntercityOrderEntity saveIntercityOrder(IntercityCreateOrderParam param);
    IntercityOrderEntity createIntercityOrder(IntercityCreateOrderParam param);
    IntercityOrderEntity updateIntercityOrder(IntercityCreateOrderParam param);
    HashMap getCityLines(String cityCode);

    PagingResultVO<IcListNewVO> getNewIcOrderList(IcListNewParam param);
    Boolean reCalculatePrice(IntercityRePriceParam param);
    Boolean reDispatchDriver(DispatchDriverParam param);
    Boolean dispatchDriver(DispatchDriverParam param);
    Boolean unDispatchDriver(DispatchDriverParam param);
    Boolean cancelOrder(String orderId);

    OrderVO virtualAcceptOrder(String idOrder, String idDriver);
    OrderVO virtualAcceptOrder(DispatchParam param);

    OrderPriceVO getIntercityPrice(IntercityPriceParam param);

    OrderPriceVO getCommonPrice(IntercityPriceParam param);
    IntercityOrderEntity createOrder(IntercityCreateOrderParam param);

    PagingResultVO<IcSearchVO> icOrderSearch(IcListParam param, Boolean forHistory);

    PagingResultVO<IcSearchTaskVO> icOrderSearchTask(IcListTaskParam param);

    IcDetailVO icOrderDetail(String idOrder,Boolean forHistory);

    IcTaskDetailVO icTaskDetail(String idTask);

    IcTaskDetailVO icTaskHistoryDetail(String idTask);

    List<IntercityLineEntity> getIcLineByIdFranchisee(String idFranchisee);

    Boolean icOrderDestroy(IcOrderDestroyParam param);

    Boolean icReMemo(String idOrder, String memo);

    IcOrderBillInfoVO getOrderBillInfo(String idOrder,Boolean forHistory);

    PagingResultVO<IcOrderSettlementViewVO> icOrderBillViewLst(IcSettlementViewListParam param);

    IcOrderInfoVO orderInfo(String idOrder);

    IntercityLineEntity findIdLineByStartCityCodeAndEndCityCode(String startCityCode,String endCityCode);

    HashMap getCustomCityLines(String cityCode);

    PagingResultVO<IcSearchVO> dispatherIcOrderSearch(DispatcherSearchOrderParam param, Boolean forHistory);

}
